#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
# @Time    : 2019/3/25 14:30
# @Author  : Leonis
# @Site    : 
# @File    : message.py
# @Software: PyCharm
# @Describe: 返回必要的提示信息.
"""

import json

from enum import Enum, unique


@unique
class ResponseTips(Enum):
	"""
	返回信息的状态码、响应信息
	"""

	# [1] 注册页面提示信息
	REGISTER_PAGE = {
		'10001': '注册成功: 请使用注册信息重新登陆',
		'10002': '注册失败: 输入用户名或密码为空',
		'10003': '注册失败: 输入用户密码与重复密码不一致',
		'10004': '注册失败: 填写信息缺少必要字段',
		'10005': '注册失败: 当前用户已存在, 请重新注册',
		'10006': '注册失败: 未知原因',
	}

	# [2] 登陆页面提示信息
	LOGIN_PAGE = {
		'20001': '登陆成功: 欢迎访问本站点',
		'20002': '登陆失败: 输入账户为空或不存在',
		'20003': '登陆失败: 输入密码错误',
		'20004': '登陆失败: 输入验证码有误，请重新登陆',
		'20005': '登陆失败: 登陆状态异常, 请联系管理员',
		'20006': '登陆失败: 其他原因',
	}

	# [3] 下载 Oss 征信报告 reprot Form页面提示
	DOWNLAOD_REPORT_PAGE = {
		'30001': '提交任务成功: 查看任务执行状态',
		'30002': '提交任务失败: 上传文件传输失败',
		'30003': '提交任务失败: 上传文件解析失败',
		'30004': '提交任务失败: Odps 数据表不存在',
		'30005': '提交任务失败: Odps 数据表访问权限不足',
		'30006': '提交任务失败: 其它原因',
	}

	# [4] 下载 Odps 数据表 table Form页面提示
	DOWNLAOD_TABLE_PAGE = {
		'40001': '提交任务成功: 查看任务执行状态',
		'40002': '提交任务失败: 上传文件传输失败',
		'40003': '提交任务失败: 上传文件解析失败',
		'40004': '提交任务失败: Oss 数据表不存在',
		'40005': '提交任务失败: Oss 数据表访问权限不足',
		'40006': '提交任务失败: 其它原因',
	}

	# [5] 任务列表的状态信息页面提示
	TASK_LIST_PAGE = {
		'50001': '任务执行成功',
		'50002': '任务执行失败:',
		'50003': '任务执行失败',
		'50004': '任务执行失败',
		'50005': '任务执行失败',
	}

	@staticmethod
	def return_result(response=None, describe=None, be_json=True, **kwargs):
		"""
		返回 response 元组 转换成 字典 或 json 字符串.
		:param response : 返回输入 返回码 元组, 如上述元组 AUTHENTICATION_SUCCESS
		:param describe : 添加额外的描述信息.
		:param be_json  : 是否转换成json字符串, 默认进行转换.
		"""

		# 返回信息
		response_info = dict()

		if isinstance(response, tuple):
			# 若输入 response_code 为元组.
			response_info['respCode'] = response[0]
			response_info['respMsg'] = response[1]

			# 若额外描述内容不为空, 则写入额外描述信息.
			if describe:
				response_info['describe'] = describe

			if kwargs:
				# 若有额外关键字参数 kwargs.
				response_info.update(kwargs)

			if be_json:
				# 默认返回结果：json 字符串
				return json.dumps(response_info, ensure_ascii=False)
			else:
				# 否则返回结果：字典形式
				return response_info
		else:
			raise TypeError('参数 response_code 必须为tuple.')
